﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Crosland.Offline.Core;
using Crosland.Offline.Logic;
using Crosland.Offline.WinForm.Properties;
using Crosland.Util;

namespace Crosland.Offline.WinForm
{
    public partial class ParametroEdit : Form
    {
        /// <summary>
        /// Instancia de clase que controla
        /// </summary>
        ParametroLogic logic = new ParametroLogic();

        private System.String codigoTabla;
                
        /// <summary>
        /// Constructor
        /// </summary>
        public ParametroEdit()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Evento de carga de la página
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ParametroEdit_Load(object sender, EventArgs e)
        {
            this.CargarDatos();
            this.gvParametros.AutoGenerateColumns = false;
        }
        
        
        /// <summary>
        /// Graba las modificaciones de los valores de los parametros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();
        }

        /// <summary>
        /// Cancela las operaciones
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        /// <summary>
        /// Controla el cambio de selección del combo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ddlParametro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.ddlParametro.SelectedIndex > 0)
            {
                this.CargarParametrosHijos();
            }
        }

        /// <summary>
        /// Permite cargar los datos del formulario
        /// </summary>
        protected void CargarDatos()
        {
            List<Parametro> list = this.logic.ListarParametros();
            Parametro entity = new Parametro();
            entity.IdTabla = "";
            entity.DesParametro = "-SELECCIONE-";
            list.Insert(0, entity);
            this.ddlParametro.DataSource = list;
            this.ddlParametro.ValueMember = "IdTabla";
            this.ddlParametro.DisplayMember = "DesParametro";           
        }

        /// <summary>
        /// Permite cargar los parametros correspondientes a una categoría
        /// </summary>
        protected void CargarParametrosHijos()
        {            
            this.gvParametros.DataSource = this.logic.GetByCriteria(
                this.ddlParametro.SelectedValue.ToString());

            this.codigoTabla = this.ddlParametro.SelectedValue.ToString();
        }

        /// <summary>
        /// Permite guardar las modificaciones
        /// </summary>
        protected void Grabar()
        {
            try
            {
                bool flag = true;
                List<Parametro> list = new List<Parametro>();              
                foreach (DataGridViewRow row in this.gvParametros.Rows)
                {
                    Parametro entity = new Parametro();
                    entity.IdTabla = this.codigoTabla;
                    entity.ID = int.Parse(row.Cells[2].Value.ToString());

                    if (row.Cells[1].Value != null)
                    {
                        entity.DesValor = row.Cells[1].Value.ToString();
                    }
                    else 
                    {
                        flag = false;
                        break;
                    }       

                    list.Add(entity);
                }

                if (flag)
                {
                    this.logic.ActualizarValorParametros(list);
                    MessageBox.Show(Resources.MsgExitoGrabar);
                }
                else                 
                {
                    MessageBox.Show("Ingrese el valor de cada parámetro.");
                }
            }
            catch
            {
                MessageBox.Show(Resources.MsgErrorGrabar);
            }
        }

        private void gvParametros_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (this.gvParametros.Columns[e.ColumnIndex].Name == "VALOR")
            {
                string s = e.FormattedValue.ToString();
                if (!Tools.ValidarAlfanumerico(s))
                {
                    this.gvParametros.Rows[e.RowIndex].ErrorText = "Solo se permiten letras y números.";
                    e.Cancel = true;
                }
                else 
                {
                    this.gvParametros.Rows[e.RowIndex].ErrorText = string.Empty;
                }
            }
        }
    }
}
